package org.example;

import org.example.config.AppConfig;
import org.example.service.ScopeTestService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Spring Bean作用域演示应用程序
 */
public class App {
    
    public static void main(String[] args) {
        System.out.println("=== Spring Bean作用域演示程序 ===");
        
        // 创建Spring容器
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        
        // 获取测试服务
        ScopeTestService testService = context.getBean(ScopeTestService.class);
        
        // 显示Bean信息
        testService.showBeanInfo();
        
        // 测试Singleton作用域
        testService.testSingletonScope();
        
        // 测试Prototype作用域
        testService.testPrototypeScope();
        
        // 测试自定义ThreadLocal作用域
        testService.testThreadScope();
        
        System.out.println("\n=== 作用域说明 ===");
        System.out.println("1. Singleton（单例）: 整个Spring容器中只创建一个Bean实例");
        System.out.println("2. Prototype（原型）: 每次请求Bean时都创建新的实例");
        System.out.println("3. Request（请求）: 每个HTTP请求创建一个实例（仅Web环境）");
        System.out.println("4. Session（会话）: 每个HTTP会话创建一个实例（仅Web环境）");
        System.out.println("5. Application（应用）: 整个Web应用创建一个实例（仅Web环境）");
        
        System.out.println("\n注意：Request、Session、Application作用域需要在Web环境中运行");
        System.out.println("请参考WebScopeController类中的演示代码");
        
        // 关闭容器
        ((AnnotationConfigApplicationContext) context).close();
    }
}
